home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
data
/
happysrc
/
pcheap.c
< prev
next >
Wrap
Text File
|
1993-11-30
|
2KB
|
72 lines
/***************************************************
* *
* *** HAPPy Pascal Compiler *** *
* 作業用heapメモリ管理処理 *
* *
* Copyright (c) H.Asano 1992 *
* *
***************************************************/
#define EXTERN extern
#define Maxheap 32768 /* 最大heapメモリ量 */
#include <malloc.h>
#include <stdlib.h>
#include "pascomp.h"
extern void pcerr(int,char*) ;
extern void term(void) ;
static char *topheap ; /* 今のheapメモリ先頭 */
static size_t total = 0 ; /* 確保量累計 */
/***************************************/
/* initheap() : 初期メモリ一括確保処理 */
/***************************************/
void initheap(void)
{
topheap = (char*)malloc(Maxheap); /* 一括確保する */
if(topheap == nil) {
pcerr(700,"");
term() ;
}
}
/**************************************/
/* Malloc() : メモリ確保処理 */
/**************************************/
void *Malloc(size_t size)
{
void *adr ;
adr = (void*)topheap ;
size = (size+1)/2 * 2 ;
topheap += size ;
total += size ;
if(Maxheap >= total) return(adr); /* メモリ割当が可能な時 */
else { /* 割当不可能の時 */
pcerr(700,"") ; /* 作業エリア確保失敗 */
term() ; /* 終了処理 */
}
}
/**************************************/
/* mark() : 一括解放ポイントマーク処理 */
/**************************************/
void *mark(void)
{
return((void*)topheap) ;
}
/**************************************/
/* release() : 一括解放処理 */
/**************************************/
void release(void *adr)
{
total -= (size_t)(topheap - (char*)adr) ;
topheap = (char*)adr ;
}